popover: Allocate after setting final_position
authorMatthias Clasen <mclasen@redhat.com>
Tue, 28 Apr 2020 00:58:03 +0000 (20:58 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 28 Apr 2020 00:58:03 +0000 (20:58 -0400)
When we find out that we've been flipped, set
final_position and final_rect before allocating
the popover. This prevents 'smashed-in beak' disease.

Fixes: #2671
gtk/gtkpopover.c

index 89e5912e6691bbf43cecc5d6c0c1964ad4d6d07c..7de2713771ddef5f58cf48c245547019d9f456d8 100644 (file)
@@ -379,11 +379,6 @@ update_popover_layout (GtkPopover     *popover,
     did_flip_vertically (gdk_popup_layout_get_surface_anchor (layout),
                          gdk_popup_get_surface_anchor (popup));
 
-  gtk_widget_allocate (GTK_WIDGET (popover),
-                       gdk_surface_get_width (priv->surface),
-                       gdk_surface_get_height (priv->surface),
-                       -1, NULL);
-
   priv->final_rect = final_rect;
 
   switch (priv->position)
@@ -405,6 +400,11 @@ update_popover_layout (GtkPopover     *popover,
       break;
     }
 
+  gtk_widget_allocate (GTK_WIDGET (popover),
+                       gdk_surface_get_width (priv->surface),
+                       gdk_surface_get_height (priv->surface),
+                       -1, NULL);
+
   g_clear_pointer (&priv->arrow_render_node, gsk_render_node_unref);
   gtk_widget_queue_draw (GTK_WIDGET (popover));
 }